A software compiler is a type of computer program (or set of programs) that transforms source code written in a programming language (the source language) into another computer language (the target language) to create executable programs that will run accurately on some form of computing device. During compilation of the source code, the compiler may produce various outputs, such as error messages, diagnostics, warnings or other information describing various aspects of the compilation, and/or executable object code.
Compilers are intended to be used frequently and are critical to the software development process. Accordingly, the integrity of compilers must be assiduously maintained and verified to ensure that the compiler implementation conforms to the compiler's specifications, the compiler generates accurate object code, and ultimately that the compiler generates properly functioning executable programs. Thus, compilers must be extensively tested to isolate and identify any bugs and/or logical errors that may exist. Due to the complexity of the compiler as a program, properly testing the compiler is often a complex task. Current methodologies for testing compilers rely on the creation and maintenance of a large number of test cases, which often take the form of example programs to be compiled and a description of what constitutes correct compiler output. The test cases are executed to generate output, which is subsequently compared against expected results to determine whether the tests were successful. However, such methodologies are both limited in analysis and time-consuming, and thus may not provide sufficient test coverage for some of the more complex language features supported by compilers. Accordingly, as compilers become increasingly complex, more sophisticated testing techniques are needed. It is with these observations in mind, among others, that various aspects of the present disclosure were developed.